/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sys.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sys.bean.CidadeBean;
import sys.bean.ClienteBean;
import sys.bean.EstadoBean;
import sys.bean.MotoristaBean;
import sys.bean.PedidoBean;
import sys.bean.RomaneioBean;
import sys.bean.StatusBean;
import sys.bean.VeiculoBean;
import sys.utils.ConexaoMySql;
import sys.utils.Utils;

/**
 *
 * @author Administrador
 */
public class RomaneioDao {

    public void retornoRomaneio(RomaneioBean romaneio) throws SQLException {

        Connection con = ConexaoMySql.getConection();
        String sql = "UPDATE \n"
                + "romaneio \n"
                + "SET \n"
                + "aplicacao=?,  inicio_carga =?,  chegada_obra =?,  inicio_descarga =?,  termino_descarga =?,  saida_obra =?,  chegada_usina =?,  \n"
                + "total_agua =?,  agua_na_obra =?,  slump_retornado =?,  data_moldagem =?,  hora_moldagem =?, data_retorno = NOW() \n"
                + "WHERE  id_romaneio =?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setString(1, romaneio.getAplicacao());
        stmt.setString(2, romaneio.getInicioCarga());
        stmt.setString(3, romaneio.getChegObra());
        stmt.setString(4, romaneio.getInicioDescarga());
        stmt.setString(5, romaneio.getTermDescarga());
        stmt.setString(6, romaneio.getSaidaObra());
        stmt.setString(7, romaneio.getChegadaUsina());
        stmt.setDouble(8, romaneio.getTotalAgua());
        stmt.setDouble(9, romaneio.getAguaObra());
        stmt.setDouble(10, romaneio.getSlumpRetornado());
        stmt.setDate(11, Utils.convert(romaneio.getDataMoldagem()));
        stmt.setString(12, romaneio.getHoraMoldagem());
        stmt.setInt(13, romaneio.getIdRomaneio());

        stmt.execute();

        stmt.close();
        con.close();
    }

    public void atualizaDataEnvio(int idRomaneio) throws SQLException {
        Connection con = ConexaoMySql.getConection();
        String sql = "UPDATE romaneio SET data_saida = NOW() WHERE  id_romaneio=?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setInt(1, idRomaneio);

        stmt.execute();

        stmt.close();
        con.close();
    }

    public void atualizaTracos(RomaneioBean romaneio) throws SQLException {
        Connection con = ConexaoMySql.getConection();
        String sql = "UPDATE romaneio set traco_gerado_pedra = ?, traco_gerado_pedrisco = ?, traco_gerado_areia = ?, traco_gerado_cimento = ?, traco_gerado_aditivo = ?, traco_gerado_agua = ?, "
                + "traco_utilizado_pedra = ?, traco_utilizado_pedrisco = ?, traco_utilizado_areia = ?, "
                + "traco_utilizado_cimento = ?, traco_utilizado_aditivo = ?, traco_utilizado_agua = ?, data_carregamento = NOW() \n"
                + "WHERE id_romaneio = ?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setDouble(1, romaneio.getTracoGeradoPedra());
        stmt.setDouble(2, romaneio.getTracoGeradoPedrisco());
        stmt.setDouble(3, romaneio.getTracoGeradoAreia());
        stmt.setDouble(4, romaneio.getTracoGeradoCimento());
        stmt.setDouble(5, romaneio.getTracoGeradoAditivo());
        stmt.setDouble(6, romaneio.getTracoGeradoAgua());
        stmt.setDouble(7, romaneio.getTracoUtilizadiPedra());
        stmt.setDouble(8, romaneio.getTracoUtilizadiPedrisco());
        stmt.setDouble(9, romaneio.getTracoUtilizadiAreia());
        stmt.setDouble(10, romaneio.getTracoUtilizadiCimento());
        stmt.setDouble(11, romaneio.getTracoUtilizadiAditivo());
        stmt.setDouble(12, romaneio.getTracoUtilizadiAgua());
        stmt.setInt(13, romaneio.getIdRomaneio());

        stmt.execute();

        stmt.close();
        con.close();
    }

    public void alterar(RomaneioBean romaneio) throws SQLException {
        Connection con = ConexaoMySql.getConection();
        String sql = "UPDATE romaneio set id_cliente = ?, id_motorista = ?, id_veiculo = ?, codigo_usuario = ?, id_pedido = ?, cidade_id = ?, obs = ?, data_romaneio = ?, data_entrega_angendado = ?, "
                + "hora_agendada = ?, endereco_entrega = ?, n_endereco_entrega = ?, bairro_entrega = ? \n"
                + "WHERE id_romaneio = ?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setInt(1, Integer.parseInt(romaneio.getCliente().getCodigo()));
        stmt.setInt(2, romaneio.getMotorista().getIdMotorista());
        stmt.setInt(3, romaneio.getVeiculo().getIdVeiculo());
        stmt.setString(4, romaneio.getUsuario().getCodigo());
        stmt.setInt(5, Integer.parseInt(romaneio.getPedido().getPedido()));
        stmt.setInt(6, romaneio.getCidade().getIdCidage());
        stmt.setString(7, romaneio.getObs());
        stmt.setDate(8, Utils.convert(romaneio.getDataRomaneio()));
        stmt.setDate(9, Utils.convert(romaneio.getDataEntregaAgendada()));
        stmt.setString(10, romaneio.getHoraAgendada());
        stmt.setString(11, romaneio.getEnderecoEntrega());
        stmt.setString(12, romaneio.getnEnderecoEntrega());
        stmt.setString(13, romaneio.getBairroEntrega());
        stmt.setInt(14, romaneio.getIdRomaneio());

        stmt.execute();

        stmt.close();
        con.close();
    }

    public void incluir(RomaneioBean romaneio) throws SQLException {

        Connection con = ConexaoMySql.getConection();
        String sql = "INSERT INTO romaneio \n"
                + "(id_cliente, id_motorista, id_veiculo, codigo_usuario, id_pedido, cidade_id, obs, data_romaneio, data_entrega_angendado, hora_agendada, endereco_entrega, n_endereco_entrega, bairro_entrega) \n"
                + "VALUES \n"
                + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setInt(1, Integer.parseInt(romaneio.getCliente().getCodigo()));
        stmt.setInt(2, romaneio.getMotorista().getIdMotorista());
        stmt.setInt(3, romaneio.getVeiculo().getIdVeiculo());
        stmt.setString(4, romaneio.getUsuario().getCodigo());
        stmt.setInt(5, Integer.parseInt(romaneio.getPedido().getPedido()));
        stmt.setInt(6, romaneio.getCidade().getIdCidage());
        stmt.setString(7, romaneio.getObs());
        stmt.setDate(8, Utils.convert(romaneio.getDataRomaneio()));
        stmt.setDate(9, Utils.convert(romaneio.getDataEntregaAgendada()));
        stmt.setString(10, romaneio.getHoraAgendada());
        stmt.setString(11, romaneio.getEnderecoEntrega());
        stmt.setString(12, romaneio.getnEnderecoEntrega());
        stmt.setString(13, romaneio.getBairroEntrega());

        stmt.execute();

        stmt.close();
        con.close();
    }

    public static int lastID() throws SQLException {
        Connection con = ConexaoMySql.getConection();
        int id = 0;

        String sqlData = "SELECT MAX(r.id_romaneio) lastId \n"
                + "        FROM romaneio r";
        PreparedStatement stmt = con.prepareStatement(sqlData);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            id = rs.getInt("lastId");
        }
        stmt.close();
        con.close();
        return id;
    }

    public List<RomaneioBean> listaRomaneiosAgendados(String dataInicial, String dataFinal, String idCliente, String idProduto, int idStatus)
            throws SQLException {
        List<RomaneioBean> listaRomaneios = new ArrayList<>();
        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT r.id_romaneio, r.id_pedido, c.nome, r.endereco_entrega, r.n_endereco_entrega, r.bairro_entrega, \n"
                + "UPPER(cid.nome) as cidade, m.nome AS motorista, m.sobre_nome, v.modelo, v.placa, \n"
                + "r.data_entrega_angendado, r.hora_agendada \n"
                + "FROM romaneio r \n"
                + "INNER JOIN cidade cid ON (cid.id = r.cidade_id) \n"
                + "INNER JOIN cliente c ON (c.id_cliente = r.id_cliente) \n"
                + "INNER JOIN motorista m ON (m.id_motorista = r.id_motorista) \n"
                + "INNER JOIN veiculo v ON (v.id_veiculo = r.id_veiculo)\n"
                + "INNER JOIN produto_romaneio pr ON (pr.id_romaneio = r.id_romaneio) \n"
                + "WHERE c.id_cliente LIKE '%" + idCliente + "%' \n"
                + "AND pr.produto_codigo LIKE '%" + idProduto + "%' \n"
                + "AND r.data_entrega_angendado BETWEEN '" + dataInicial + "' AND '" + dataFinal + "'\n"
                + "ORDER BY r.data_entrega_angendado";

        System.out.println(sql);

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            RomaneioBean romaneio = new RomaneioBean();
            PedidoBean pedido = new PedidoBean();
            ClienteBean cliente = new ClienteBean();
            CidadeBean cidade = new CidadeBean();
            MotoristaBean motorista = new MotoristaBean();
            VeiculoBean veiculo = new VeiculoBean();
            StatusBean status = new StatusBean();

            cliente.setNome(rs.getString("nome"));
            romaneio.setCliente(cliente);

            cidade.setNome(rs.getString("cidade"));
            romaneio.setCidade(cidade);

            pedido.setPedido(rs.getString("id_pedido"));
            romaneio.setPedido(pedido);

            motorista.setNome(rs.getString("motorista"));
            motorista.setSobreNome(rs.getString("sobre_nome"));
            romaneio.setMotorista(motorista);

            veiculo.setModelo(rs.getString("modelo"));
            veiculo.setPlaca(rs.getString("placa"));
            romaneio.setVeiculo(veiculo);

            //status.setDescricao(rs.getString("descricao"));
            //romaneio.setStatus(status);
            romaneio.setIdRomaneio(rs.getInt("id_romaneio"));
            romaneio.setEnderecoEntrega(rs.getString("endereco_entrega"));
            romaneio.setnEnderecoEntrega(rs.getString("n_endereco_entrega"));
            romaneio.setBairroEntrega(rs.getString("bairro_entrega"));
            romaneio.setDataEntregaAgendada(rs.getDate("data_entrega_angendado"));
            romaneio.setHoraAgendada(rs.getString("hora_agendada"));

            listaRomaneios.add(romaneio);

        }

        stmt.close();
        con.close();

        return listaRomaneios;
    }

    public RomaneioBean getRomaneio(int idRomaneio) throws SQLException {
        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT r.id_romaneio, r.id_pedido, r.data_romaneio, c.id_cliente, c.nome, r.data_entrega_angendado, r.hora_agendada, \n"
                + "r.endereco_entrega, r.n_endereco_entrega, r.bairro_entrega, UPPER(e.nome) estado_nome , UPPER(e.uf) estado_uf, \n"
                + "UPPER(cid.nome) AS cidade_nome, cid.uf, m.id_motorista, m.nome AS nome_motorista, \n"
                + "m.sobre_nome, m.cpf, v.id_veiculo, v.modelo, v.placa, r.obs, r.slump_gerado, r.slump_utilizado, \n"
                + "r.traco_utilizado_pedra, r.traco_utilizado_pedrisco,  r.traco_utilizado_areia, r.traco_utilizado_cimento, \n"
                + "r.traco_utilizado_aditivo, r.traco_utilizado_agua \n"
                + "FROM romaneio r \n"
                + "INNER JOIN cliente c ON (c.id_cliente = r.id_cliente) \n"
                + "INNER JOIN motorista m ON (m.id_motorista = r.id_motorista) \n"
                + "INNER JOIN veiculo v ON (v.id_veiculo = r.id_veiculo) \n"
                + "INNER JOIN status_romaneio sr ON (sr.id_romaneio = r.id_romaneio) \n"
                + "INNER JOIN status s ON (s.id_status = sr.id_status) \n"
                + "INNER JOIN cidade cid ON (cid.id = r.cidade_id) \n"
                + "INNER JOIN estado e ON (e.id = cid.estado_id) \n"
                + "WHERE r.id_romaneio = " + idRomaneio;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        RomaneioBean romaneio = new RomaneioBean();
        PedidoBean pedido = new PedidoBean();
        ClienteBean cliente = new ClienteBean();
        EstadoBean estado = new EstadoBean();
        CidadeBean cidade = new CidadeBean();
        MotoristaBean motorista = new MotoristaBean();
        VeiculoBean veiculo = new VeiculoBean();

        while (rs.next()) {
            romaneio.setIdRomaneio(rs.getInt("id_romaneio"));
            romaneio.setDataRomaneio(rs.getDate("data_romaneio"));
            romaneio.setDataEntregaAgendada(rs.getDate("data_entrega_angendado"));
            romaneio.setHoraAgendada(rs.getString("hora_agendada"));
            romaneio.setEnderecoEntrega(rs.getString("endereco_entrega"));
            romaneio.setnEnderecoEntrega(rs.getString("n_endereco_entrega"));
            romaneio.setBairroEntrega(rs.getString("bairro_entrega"));
            romaneio.setObs(rs.getString("obs"));
            romaneio.setSlumpGerado(rs.getInt("slump_gerado"));
            romaneio.setSlumpUtilizado(rs.getInt("slump_utilizado"));
            romaneio.setTracoUtilizadiPedra(rs.getDouble("traco_utilizado_pedra"));
            romaneio.setTracoUtilizadiPedrisco(rs.getDouble("traco_utilizado_pedrisco"));
            romaneio.setTracoUtilizadiAreia(rs.getDouble("traco_utilizado_areia"));
            romaneio.setTracoUtilizadiCimento(rs.getDouble("traco_utilizado_cimento"));
            romaneio.setTracoUtilizadiAditivo(rs.getDouble("traco_utilizado_aditivo"));
            romaneio.setTracoUtilizadiAgua(rs.getDouble("traco_utilizado_agua"));

            cliente.setCodigo(rs.getString("id_cliente"));
            cliente.setNome(rs.getString("nome"));
            romaneio.setCliente(cliente);

            pedido.setPedido(rs.getString("id_pedido"));
            romaneio.setPedido(pedido);

            estado.setNome(rs.getString("estado_nome"));
            estado.setUf(rs.getString("estado_uf"));
            cidade.setEstado(estado);

            cidade.setNome(rs.getString("cidade_nome"));
            cidade.setUf(rs.getString("uf"));
            romaneio.setCidade(cidade);

            motorista.setIdMotorista(rs.getInt("id_motorista"));
            motorista.setNome(rs.getString("nome_motorista"));
            motorista.setSobreNome(rs.getString("sobre_nome"));
            motorista.setCpf(rs.getString("cpf"));
            romaneio.setMotorista(motorista);

            veiculo.setIdVeiculo(rs.getInt("id_veiculo"));
            veiculo.setModelo(rs.getString("modelo"));
            veiculo.setPlaca(rs.getString("placa"));
            romaneio.setVeiculo(veiculo);

        }
        stmt.close();
        con.close();
        return romaneio;
    }

    public RomaneioBean tracosRomaneio(int idRomaneio) throws SQLException {
        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT r.traco_utilizado_pedra, r.traco_utilizado_pedrisco, r.traco_utilizado_areia, r.traco_utilizado_cimento, r.traco_utilizado_aditivo,\n"
                + "r.traco_utilizado_agua\n"
                + "FROM romaneio r\n"
                + "WHERE r.id_romaneio =  " + idRomaneio;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        RomaneioBean romaneio = new RomaneioBean();

        while (rs.next()) {

            romaneio.setTracoUtilizadiPedra(rs.getDouble("traco_utilizado_pedra"));
            romaneio.setTracoUtilizadiPedrisco(rs.getDouble("traco_utilizado_pedrisco"));
            romaneio.setTracoUtilizadiAreia(rs.getDouble("traco_utilizado_areia"));
            romaneio.setTracoUtilizadiCimento(rs.getDouble("traco_utilizado_cimento"));
            romaneio.setTracoUtilizadiAditivo(rs.getDouble("traco_utilizado_aditivo"));
            romaneio.setTracoUtilizadiAgua(rs.getDouble("traco_utilizado_agua"));

        }
        stmt.close();
        con.close();
        return romaneio;
    }

}
